/*
 * @Author: Kiro AI Assistant
 * @Date: 2025-01-10
 * @Description: 集中式错误处理工具类
 */

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'network_utils.dart';

/// 集中式错误处理器
/// 提供统一的错误处理和用户友好的错误提示
class ErrorHandler {
  /// 处理错误
  /// [error] 错误对象
  /// [stackTrace] 堆栈跟踪
  static void handleError(Object error, StackTrace stackTrace) {
    // 记录错误日志
    if (kDebugMode) {
      debugPrint('错误: $error');
      debugPrint('堆栈跟踪: $stackTrace');
    }

    // 显示用户友好的错误提示
    final errorMessage = _getErrorMessage(error);
    _showErrorMessage(errorMessage);
  }

  /// 获取用户友好的错误信息
  static String _getErrorMessage(Object error) {
    if (error is Exception) {
      return NetworkUtils.getUserFriendlyErrorMessage(error);
    } else if (error is FormatException) {
      return '数据格式错误';
    } else {
      return '操作失败，请重试';
    }
  }

  /// 显示错误消息
  static void _showErrorMessage(String message) {
    // 这里可以根据需要实现不同的错误提示方式
    // 比如 SnackBar、Toast、Dialog 等
    if (kDebugMode) {
      debugPrint('用户错误提示: $message');
    }
  }

  /// 显示 SnackBar 错误提示
  static void showErrorSnackBar(BuildContext context, String message) {
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(
        content: Text(message),
        backgroundColor: Colors.red,
        duration: const Duration(seconds: 3),
        action: SnackBarAction(
          label: '关闭',
          textColor: Colors.white,
          onPressed: () {
            ScaffoldMessenger.of(context).hideCurrentSnackBar();
          },
        ),
      ),
    );
  }
}

/// 显示全局错误提示
/// 可以在应用的任何地方调用，不需要 BuildContext
class GlobalErrorHandler {
  static final GlobalKey<ScaffoldMessengerState> _scaffoldMessengerKey =
      GlobalKey<ScaffoldMessengerState>();

  /// 获取 ScaffoldMessenger 的 GlobalKey
  static GlobalKey<ScaffoldMessengerState> get scaffoldMessengerKey =>
      _scaffoldMessengerKey;

  /// 显示全局错误提示
  static void showGlobalError(String message) {
    _scaffoldMessengerKey.currentState?.showSnackBar(
      SnackBar(
        content: Text(message),
        backgroundColor: Colors.red,
        duration: const Duration(seconds: 3),
        action: SnackBarAction(
          label: '关闭',
          textColor: Colors.white,
          onPressed: () {
            _scaffoldMessengerKey.currentState?.hideCurrentSnackBar();
          },
        ),
      ),
    );
  }
}
